package com.tedu.api.io;

import org.junit.Test;

import java.io.File;
import java.io.IOException;


    /**
     * File   表示 文件或者文件夹【存在硬盘】
     * 测试：io包下创建文件
     * 验证项目下是否存在 demo.txt  文件
     * 创建File文件类
     * File file=new File("传入路径")
     * 构造器：传入路径   / \表示路径
     *                 /  表示路径、文件下载【下载到本地】---本次测试
     *                 \  表示路径、文件上传【上传到服务器】--网络   √
     * File文件/文件夹类可以做什么：【常用方法】
     * 1.查看文件或者文件夹的属性信息（名字、大小、判断文件是否存在 等）
     * 2.操作文件或者文件夹类（创建、删除 等）
     * 3.访问任何一个目录的子项（访问文件夹下的文件夹操作）
     */
    public class FileAPI {
    @Test
    public void textFile() {
       //项目结构：C/S架构----Maven----查路径----通过Idea查路径【准】
       //找到需要查找文件夹/文件---右键---打开于---Explorer
       //src\main\java\com\tedu\api\io    char c='\\'   转义成路径：\
       //编写Java代码--任何操作平台运行---路径---封装：静态属性
       //Java编写 \\  情况--->
       //--->File.separator   静态属性可以在任何平台上转义成对应路径
            File file = new File("src" + File.separator + "mai" +
                    "n" + File.separator + "jav" +
                    "a" + File.separator + "co" +
                    "m" + File.separator + "ted" +
                    "u" + File.separator + "api" + File.separator + "i" +
                    "o" + File.separator + "demo.txt");
       //验证：demo.txt文件是否存在
            boolean b = file.exists();
            System.out.println("测试demo.txt文件是否存在：" + b);

        }

        /**
         * getName()   返回值：String
         * 获取文件/文件夹的名字[注意：不管file是否存在，只会拿名]
         * length()    返回值：long
         * 返回当前文件的大小（字节量）---汉字：3个字节量
         * exists()   返回值：boolean
         * 判断file文件是否存在，存在true，反之
         */
        @Test
        public void testGLE() {
        File file = new File("src" + File.separator + "mai" +
                    "n" + File.separator + "jav" +
                    "a" + File.separator + "co" +
                    "m" + File.separator + "ted" +
                    "u" + File.separator + "api" + File.separator + "i" +
                    "o" + File.separator + "demo.txt");
        String str = file.getName();
        System.out.println("file文件名字是：" + str);
        long length = file.length();
        System.out.println("file文件字节量是：" + length);
        }

        /**
         * 操作文件或者文件夹（创建、删除）
         * createNewFile()
         * 创建新文件，创建不成功，如果不成功抛出IO流异常
         */
        @Test
        public void tstCreateNewFile() throws IOException {
            //需求：用程序创建一个文件：text.txt
            File file = new File("src" + File.separator + "mai" +
                    "n" + File.separator + "jav" +
                    "a" + File.separator + "co" +
                    "m" + File.separator + "ted" +
                    "u" + File.separator + "api" + File.separator + "i" +
                    "o" + File.separator + "text.txt");
            //创建text.txt---判断当前文件夹下是否存在，存在--不创建
            //                                    不存在--创建
            if (!file.exists()) {//   text.txt文件不存在
            //创建文件
            System.out.println("文件是不存在");
            file.createNewFile();
            System.out.println("文件创建完毕");
            } else {
            System.out.println("文件存在，别创建");
            }
        }

        /**
         * 拓展：存放文件位置：  Maven项目：main  程序入口
         * test  程序测试
         * 查找：main下或者test下，必须从src位置开始找
         * --------------------------
         * .  代表当前项目下
         */
        @Test
        public void testPath() throws IOException {
            // FileAPI.java相对于项目名"API"  下
            File file = new File("." + File.separator + "1");
            //查看  file  路径
            // System.out.println(file.getCanonicalPath());
            System.out.println("API项目路径下文件是否存在" + file.exists());
        }

        /**
         * 文件的删除操作
         * delete()
         * 删除已经创建完毕的文件/文件夹
         */
        @Test
        public void testDelete() {
            //创建File--找到text，txt文件
            File file = new File("." + File.separator + "text.tet");
            // 删除     如果有文件   删除  |  没有没有   不删
            if (file.exists()) {
                System.out.println("有文件");
                file.delete();
                System.out.println("文件删除成功嘞");
            } else {
                System.out.println("文件没有，别删啦好不嘞");
            }
        }

        /**
         * mkdir()
         * 在当前项目下创建一个[目录：文件夹]
         * mkdirs()
         * 创建多层【目录：文件夹】
         */
        @Test
        public void testMkdir() {
            //创建文件夹---创建在API 文件夹下demo文件夹--->abc文件夹---bcd文件夹
            File file = new File("." + File.separator + "demo" +
                    "" + File.separator + "abc" + File.separator + "bcd");
            //创建文件夹---如果没有文件夹  创建 | 有  不创建
            if (!file.exists()) {
                System.out.println("没有文件夹");
                // file.mkdir();   创建一个文件夹
                file.mkdirs();//创建多层文件夹
                System.out.println("创建成功~");
            } else {
                System.out.println("已经存在，别再创建了~");
            }
//        if(file.exists()){
//            System.out.println("有文件夹");
//            file.delete();
//            System.out.println("文件夹删除成功！");
//        }else{
//            System.out.println("文件夹没有，别删啦~");
//        }
        }

        /**
         * isDirectory()   判断是否是【目录：文件夹】，返回true
         * isFile()      判断是否是文件，返回true
         * listFiles()    返回值：数组----File[]
         * 获取当前目录下所有的子项【包含：文件、文件夹】
         */
        @Test
        public void testListFiles(){
            //需求：获取当前"API"  文件夹 下  所有的文件、文件夹
            File file=new File(".");
            //获取 文件夹
            if(file.isDirectory()){
            //获取文件夹---子项
            File[] files=file.listFiles();
            //打印获取到的文件夹名字
            for(int i=0;i< files.length;i++){
            System.out.println(files[i]);
                }
            }
        }
        /**面试题：pop\poll\peek区别
         * pop        出栈获取队首                   Deque双端队列
         * poll       出队获取队首，删队列元素         Queue单端队列
         * peek       出队获取队首，保存队列元素       Queue单端队列
         */
    }